<?php
/**
 * Модель данных очереди на модерацию
 *
 * Постановка:
 * http://platonica.ru/trac/ticket/413#comment:3
 *
 * @package default
 * @author Alexander Sibiryakov
 **/
class Model_JoinQueue extends RL_Model
{
	private $c_oid = NULL;
	
	/**
	 * Установить сообщество. Все операции будут проводиться над этим сообществом. 
	 *
	 * @return void
	 * @author Alexander Sibiryakov
	 **/
	public function setCommunity($oid) {
		if ( is_numeric($oid) ) $this->c_oid = $oid; else return false;
	}
	
	/**
	 * Проверит, есть ли данный юзер в очереди
	 *
	 * @param user_oid - oid пользователя
	 * @return bool
	 * @author Alexander Sibiryakov
	 **/
	public function inQueue($user_oid) {
		if (!isset($this->c_oid)) return NULL;
		if (!is_numeric($user_oid) || strlen($user_oid) == 0) return false;
		$prefix = $this->db->db_prefix;
		
		$sql = "SELECT COUNT(*) as count FROM {$prefix}class_joinqueue WHERE community_oid=".$this->c_oid." AND user_oid=".$user_oid;

		$data = $this->db->QueryOne($sql);	
		if ($data['count'] > 0) return true;

		return false;
	}
	
	/**
	 * Убивает все заявки, возвращает массив с ид-шниками пользователей чьи заявки были удалены
	 *
	 * @return array
	 * @author Alexander Sibiryakov
	 **/
	public function cleanUp() {
		$prefix = $this->db->db_prefix;
		if (!isset($this->c_oid)) return NULL;
		$sql = "SELECT oid FROM {$prefix}class_joinqueue WHERE community_oid=".$this->c_oid;
		$data = $this->db->query($sql);
		
		$oids = array();
		$_s = array();
		foreach ($data as $i=>$row) {
			$oids[] = $row['oid'];
			$_s[] = "oid=".$row['oid'];
		}
		$sql = "DELETE FROM {$prefix}class_joinqueue WHERE ".implode(" OR ", $_s);
		$this->db->execute($sql);
		
		$sql = "DELETE FROM {$prefix}objects WHERE ".implode(" OR ", $_s);
		$this->db->execute($sql);
				
		return $oids;
	}
		
	/**
	 * Добавить пользователя с $user_oid в очередь. Если заявка есть в очереди, то значит она на рассмотрении.
	 *
	 * @return boolean
	 * @author Alexander Sibiryakov
	 **/
	public function addToQueue($user_oid) {
		if (!isset($this->c_oid)) return NULL;	
		
		$this->store->create();
		
		$obj = $this->store->create( 'fjoinqueue', 
		array(	'community_oid' => $this->c_oid, 
				'user_oid' => $user_oid, 
				));
		$res = $obj->save();

		$res = $obj->inSense( 'joinqueue' );
		
		if ($res) return true;
			else return false;
		
	}
	
	/**
	 * Убрать пользователя с $user_oid. Используется если заявка отклоняется или одобряется.
	 *
	 * @return void
	 * @author Alexander Sibiryakov
	 **/
	public function rmFromQueue($user_oid) {
		if (!isset($this->c_oid)) return NULL;
		$prefix = $this->db->db_prefix;
		
		$sql = "SELECT oid FROM {$prefix}class_joinqueue WHERE community_oid=".$this->c_oid." AND user_oid=".$user_oid;
		$_a = $this->db->queryOne($sql);
		$oid = $_a['oid'];
		
		$sql = "DELETE FROM {$prefix}class_joinqueue WHERE oid=".$oid;
		$this->db->execute($sql);
		
		$sql = "DELETE FROM {$prefix}objects WHERE oid=".$oid;
		$this->db->execute($sql);
	}
	
	/**
	 * Получить список oid пользователей, на которых есть не обработанные заявки
	 *
	 * @return array(int)
	 * @author Alexander Sibiryakov
	 **/
	public function getUserOidsFromQueue()
	{
		if (!isset($this->c_oid)) return NULL;
		$prefix = $this->db->db_prefix;
				
		$sql = "SELECT user_oid FROM {$prefix}class_joinqueue WHERE community_oid=".$this->c_oid;
		$data = $this->db->query($sql);
		
		$oids = array();
		foreach ($data as $i=>$row) {
			$oids[] = $row['user_oid'];
		}
		return $oids;
	}
	
} // END class 
